#pragma once

#include "BasicType.h"
#include "ShapeStyleDef.h"


namespace LightPlayer {
	class SceneObject;

	class  LightAbstractRenderer{
	public:
		// render method
		virtual void pushMatrix( const MATRIX& transform ) = 0;
		virtual void DrawLine( const vec2& origin, const vec2& destination ) = 0;
		virtual void DrawQuadBezier(const vec2& origin, const vec2& control, const vec2& destination, uint32 segments) = 0;
		virtual void DrawPoint( const vec2& point ) = 0;
		virtual void DrawSolidTris( const array<vec2>& Tris ) = 0;
		virtual void DrawSolidTrisTextured( const array<vec2>& Tris, const array<vec2>& UVs, uint32 texture ) = 0;
		virtual void DrawSolidTrisGradient( const array<vec2>& Tris, const array<vec2>& UVs, const GRADIENT& Gradient ) = 0;
		virtual void popMatrix() = 0;

		// mask 
		virtual void PushMask_Start() = 0;
		virtual void PushMask_End() = 0;
		virtual void PopMask_Start() = 0;
		virtual void PopMask_End() = 0;

		virtual void setCurrentColor(float r, float g, float b, float a) = 0;
		virtual void setPointSize( float pointSize ) = 0;

		virtual void pushCXFORM(const CXFORM& new_cxform, bool use_stack_transform = true) = 0;
		virtual void popCXFORM() = 0;

		// registration method
		virtual uint32 createTextureFromRowData( uint8* _rowData, uint32 width, uint32 height ) = 0;
	};


};